想要匯出Agile的Part與BOM,首先就要了解資料表有哪些,以及如何驗證
但涉及資料問題,我把驗證交給查看在座的各位
注意也可以用Agile報表來匯出,只是會執行很久
事不宜遲,來看重點Part如何用SQL匯出
料號 | 品名規格 | 類別 | 料號版本 | 發行日期 | 是否最新版 | 單位 | 文件說明 | 生命週期
------------- | -------------
完全版
select
item.item_number item_number, --料號
(replace(replace(replace(rev.description,'<','<'),'>','>'),'&','&') || ' ' || (select agile_flex.text from agile_flex
where agile_flex.row_id=item.id and agile_flex.attid=2017)) name, --品名規格
nb.description classification, --類別
NVL(rev.rev_number,'00') cn_revision, --料號版本
(TO_CHAR (rev.release_date,'YYYY-MM-DD') || 'T' || TO_CHAR (rev.release_date,'HH24:MI:SS')) release_date, --Released Date
rev.effective_date effective_date,
rev.LATEST_FLAG is_current, --是否最新版
NVL(list02.entryvalue,'NULL') unit, --單位
(select agile_flex.text from agile_flex
where agile_flex.row_id=item.id and agile_flex.attid=1080) cn_part_note, --文件說明
replace(getpartrevtype(rev.release_type),'Part. No Released','Temp. Approved') cn_lifecycle --生命週期
from item
inner join nodetable nb on nb.id = item.subclass
inner join rev rev on rev.item = item.id
inner join item_p2 p2 on p2.item_number = item.item_number
left join listentry list02 on list02.entryid = p2.list02
where item.class = 10000
and rev.LATEST_FLAG=1
and nb.description not in('K01_紙類包裝材Paper Package')
第一部分 from 集合
第二部分 select欄位
欄位 | 解釋 |
---|---|
name 品名規格 | 這裡用到兩個內部欄位相加,一個是rev.description用最新版內容+備註欄位,備註欄位是用另一個aglie_flex表紀錄並對應屬性ID,建議要將特殊記號<>;轉換成Aras可寫入的語法 |
cn_revision 料號版本 | 建議用NVL定義預設值 |
release_date 發行日期 | 日期格式化YYYY-MM-DDTHH:mm:ss |
unit 單位 | 使用到下拉選單,故先用list02.entryvalue清單值 |
cn_lifecycle 生命週期名稱 | 這個系統使用生命週期的ID做紀錄,故ID要先對應出名稱,這裡由於我找不到生命週期的設定表,直接寫一個翻譯函式 getpartrevtype(ID)將ID翻譯成英文名稱(注意ID不會與我相同),再來用replace把Part No.Released 改成 Temp.Approved,getpartrevtype請參考最下方處 |
這裡說明用SQL匯出料號,裡面的屬性ID需要自行到Agile管理員介面中查閱,這個範例可以從簡單的item表開始測試喔!
create or replace FUNCTION GETPartREVTYPE
(
RELEASED_TYPE IN VARCHAR2
) RETURN VARCHAR2
IS
state_type varchar2(32767) :='';
BEGIN
if RELEASED_TYPE = '22507' then
state_type:= 'Released';
ELSIF RELEASED_TYPE = '25096' then
state_type:= 'Obsolete';
Elsif released_type = '23196' then
state_type:= 'Temp. Approved';
Elsif released_type = '21954' then
state_type:= 'Part. No Released';
Elsif released_type = '37409' then
state_type:= 'BOM Released';
Elsif released_type = '37410' then
state_type:= 'MP';
ELsif released_type = '21956' then
state_type:= 'Approved';
ELSE
state_type:='Preliminary';
end if;
RETURN state_type;
END GETPartREVTYPE;